home *** CD-ROM | disk | FTP | other *** search
/ 1,000+ Great Games / 1_1000 Games.iso / DOSGAMES / HELPTTT.ZIP / TTT.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1996-02-12  |  8.6 KB  |  176 lines

  1. { Purpose: This program will play Tic Tac Toe against another person.
  2.   Input  : Two integers per player.
  3.   Output : A diagram of the board showing the ending positions and total wins.
  4.   Author : Johnny Duraccio
  5.   Date   : 15 February 1996
  6.   Project: #3
  7. -----------------------------------------------------------------------------}
  8. PROGRAM Tic_Tac_Toe;
  9.  
  10. USES Crt;
  11.  
  12. TYPE
  13.    TicTacToe = Array [1..3,1..3] OF Char;    { Declare An Array Variable With    }
  14.                                              { 3 Rows And 3 Columns To Type Char }
  15. VAR
  16.    TTT:                                      { Define An Array Variable TTT To   }
  17.       TicTacToe;                             { Be Of Type TicTacToe              }
  18.    Row,                                      { Define The Variable Row           }
  19.    Col:                                      { And The Variable Column           }
  20.       Integer;                               { To Be Of Type Integer             }
  21.    Win:                                      { Define The Variable Win           }
  22.       Boolean;                               { To Be Of Type Boolean             }
  23.  
  24. { This Procedure Display The Tic Tac Toe Board }
  25.  
  26. PROCEDURE Display;
  27.  
  28. BEGIN { Display }
  29.    WriteLn;
  30.    WriteLn ('Tic Tac Toe     by Johnny Duraccio':56);
  31.    WriteLn ('──────────────────────────────────':56);
  32.    WriteLn;
  33.    WriteLn ('╔═════════════════════════════════════════════╗':63);
  34.    WriteLn ('║                                             ║':63);
  35.    WriteLn ('║                │          │                 ║':63);
  36.    WriteLn ('║                │          │                 ║':63);
  37.    WriteLn ('║                │          │                 ║':63);
  38.    WriteLn ('║        [1,1]   │   [1,2]  │   [1,3]         ║':63);
  39.    WriteLn ('║     ───────────┼──────────┼───────────      ║':63);
  40.    WriteLn ('║                │          │                 ║':63);
  41.    WriteLn ('║                │          │                 ║':63);
  42.    WriteLn ('║        [2,1]   │   [2,2]  │   [2,3]         ║':63);
  43.    WriteLn ('║     ───────────┼──────────┼───────────      ║':63);
  44.    WriteLn ('║                │          │                 ║':63);
  45.    WriteLn ('║                │          │                 ║':63);
  46.    WriteLn ('║                │          │                 ║':63);
  47.    WriteLn ('║        [3,1]   │   [3,2]  │   [3,3]         ║':63);
  48.    WriteLn ('║                                             ║':63);
  49.    WriteLn ('╚═════════════════════════════════════════════╝':63);
  50. END;  {Display}
  51.  
  52. { This Procedure Will Clear The Array }
  53.  
  54. PROCEDURE ClearArray;
  55.  
  56. BEGIN { ClearArray }
  57.    FOR Row := 1 TO 3 DO             { Loop From Row 1 To 3     }
  58.       FOR Col := 1 TO 3 DO          { Loop From Column 1 To 3  }
  59.          TTT [Row,Col] :=' ';       { And Assign A Blank Space }
  60. END; { ClearArray }
  61.  
  62. { This Procedure Puts The Characters On The Tic Tac Toe Board }
  63.  
  64. PROCEDURE ShowChars;
  65.  
  66. BEGIN { ShowChars }
  67.    CASE Col OF
  68.       1: CASE Row OF                { If Column 1 Is Chosen And }
  69.             1: GotoXY(28,8);        { If Row 1 Is Chosen, Put Symbol At This Coordinate }
  70.             2: GotoXY(28,12);       { If Row 2 Is Chosen, Put Symbol At This Coordinate }
  71.             3: GotoXY(28,17);       { If Row 3 Is Chosen, Put Symbol At This Coordinate }
  72.          END; { Case }
  73.       2: CASE Row OF                { If Column 2 Is Chosen And }
  74.             1: GotoXY(40,8);        { If Row 1 Is Chosen, Put Symbol At This Coordinate }
  75.             2: GotoXY(40,12);       { If Row 2 Is Chosen, Put Symbol At This Coordinate }
  76.             3: GotoXY(40,17);       { If Row 3 Is Chosen, Put Symbol At This Coordinate }
  77.          END; { Case }
  78.       3: CASE Row OF                { If Column 3 Is Chosen And }
  79.             1: GotoXY(51,8);        { If Row 1 Is Chosen, Put Symbol At This Coordinate }
  80.             2: GotoXY(51,12);       { If Row 2 Is Chosen, Put Symbol At This Coordinate }
  81.             3: GotoXY(51,17);       { If Row 3 Is Chosen, Put Symbol At This Coordinate }
  82.          END; { Case }
  83.    END; { Case }
  84.      Write (TTT [Row,Col]);         { Write The Symbol At This Two Dimensionl Array Coordinate }
  85. END;
  86.  
  87. { This Procedure Checks To See If There Are Any Winners }
  88.  
  89. PROCEDURE CheckWin;
  90.  
  91. BEGIN { CheckWin }
  92.    IF (TTT [1,1] = TTT [1,2]) AND (TTT [1,1] = TTT [1,3]) THEN Win := True; { Row 1 Across  }
  93.    IF (TTT [2,1] = TTT [2,2]) AND (TTT [2,1] = TTT [2,3]) THEN Win := True; { Row 2 Across  }
  94.    IF (TTT [3,1] = TTT [3,2]) AND (TTT [3,1] = TTT [3,3]) THEN Win := True; { Row 3 Across  }
  95.    IF (TTT [1,1] = TTT [2,1]) AND (TTT [1,1] = TTT [3,1]) THEN Win := True; { Column 1 Down }
  96.    IF (TTT [1,2] = TTT [2,2]) AND (TTT [1,2] = TTT [3,2]) THEN Win := True; { Column 2 Down }
  97.    IF (TTT [1,3] = TTT [2,3]) AND (TTT [1,3] = TTT [3,3]) THEN Win := True; { Column 3 Down }
  98.    IF (TTT [1,1] = TTT [2,2]) AND (TTT [1,1] = TTT [3,3]) THEN Win := True; { Diagonal From Top Left To Bottom Right }
  99.    IF (TTT [1,3] = TTT [2,2]) AND (TTT [1,3] = TTT [3,1]) THEN Win := True; { Diagonal From Top Right To Bottom Left }
  100. END; { CheckWin }
  101.                                                                                 
  102. { This Procedure Gets The Symbols And Coordinates From The Players }
  103.  
  104. PROCEDURE GetSymbolsAndCoords;
  105.  
  106. VAR
  107.    Symbol1,            { Define The Variable Symbol1 }
  108.    Symbol2:            { And The Variable Symbol2    }
  109.       Char;            { To Be Of Type Char          }
  110.    Player:             { Define The Variable Player  }
  111.       Integer;         { To Be Of Type Integer       }
  112.  
  113. BEGIN
  114.    Player := 1;        { Set Player Variable Equal To Player 1 }
  115.    Win := False;       { Set Win Variable To False - No Wins   }
  116.    REPEAT              { Repeat This Loop Until A Valid Character Is Entered }
  117.       Write ('Enter The Symbol For Player #1 [O Or X]: ':61);
  118.       ReadLn (Symbol1);                                           { Get Symbol For Player 1 }
  119.       IF NOT (Symbol1 IN ['O','o','X','x'])                       { Check For Valid Symbol  }
  120.          THEN
  121.             BEGIN
  122.                Write ('Invalid Symbol. Try Again: ');             { Show Error Message      }
  123.                ReadLn (Symbol1);                                  { Get Symbol Again        }
  124.             END;
  125.    UNTIL (Symbol1 = 'O') OR (Symbol1 = 'o') OR (Symbol1 = 'X') OR (Symbol1 = 'x');
  126.    REPEAT
  127.       Write ('Enter The Symbol For Player #2 [O Or X]: ':61);     { Get Symbol For Player 2 }
  128.       ReadLn (Symbol2);
  129.       IF NOT (Symbol2 IN ['O','o','X','x'])                       { Check For Valid Symbol  }
  130.          THEN
  131.             BEGIN
  132.                Write ('Invalid Symbol. Try Again: ');             { Show Error Message      }
  133.                ReadLn (Symbol2);                                  { Get Symbol Again        }
  134.             END;
  135.    UNTIL (Symbol2 = 'O') OR (Symbol2 = 'o') OR (Symbol2 = 'X') OR (Symbol2 = 'x');
  136.    REPEAT
  137.       Window (15,22,70,25);         { Set The Text Display Window To This Size And Location }
  138.       Clrscr;                       { Clear The Text Display Window }
  139.       Window (1,1,80,25);           { Reset The Window Display To Maximum Opening }
  140.       Write ('Player #',Player);    { Display Which Player Takes A Turn In Upper Left Corner Of Screen }
  141.       GotoXY (30,22);                        { Go To Screen Coordinates }
  142.       Write ('Enter The Row [1/2/3]: ');     { Display Prompt           }
  143.       ReadLn (Row);                          { And Get Row Number       }
  144.       GotoXY (27,23);                        { Go To Screen Coordinates }
  145.       Write ('Enter The Column [1/2/3]: ');  { Display Prompt           }
  146.       ReadLn (Col);                          { And Get Column Number    }
  147.       IF Player = 1
  148.          THEN
  149.             TTT [Row,Col] := Symbol1         { Place Symbol1 In Array   }
  150.          ELSE
  151.             TTT [Row,Col] := Symbol2;        { Place Symbol2 In Array   }
  152.       IF Player = 1
  153.          THEN
  154.             Player := Succ(Player)           { Increment Player1 To Player 2 }
  155.          ELSE
  156.             Player := 1;
  157.       ShowChars;                             { Call To ShowChars Procedure }
  158.       CheckWin;                              { Call To CheckWin Procedure  }
  159.       IF Win = True
  160.          THEN
  161.             BEGIN
  162.                GotoXY (20,25);
  163.                Write ('Winner !!');
  164.             END;
  165.    UNTIL Player = 3;
  166. END;
  167.  
  168. { Main Body Of Program }
  169.  
  170. BEGIN
  171.    ClrScr;                   { Clear The Screen                 }
  172.    ClearArray;               { Call To the ClearArray Procedure }
  173.    Display;                  { Call To the Display Procedure    }
  174.    GetSymbolsAndCoords;      { Call To GetSymbols Procedure     }
  175. END.
  176.